CROSS_COMPILE	?=
TARGET			?= main



CC				:= $(CROSS_COMPILE)gcc
LD				:= $(CROSS_COMPILE)ld
OBJCOPY			:= $(CROSS_COMPILE)objcopy
OBJDUMP			:= $(CROSS_COMPILE)objdump

# 整个工程的.h头文件目录，"\"表示换行符
INCDIRS			:= ./

#整个工程的.s和.c文件按
SRCDIRS			:= ./

# $(subst <from>, <to>, <text>) 将字符串<text>中<from>内容替换为<to>

# $(patsubst <pattern>, <replacement>, <text>)和上面一样但是多了"%"

# $(dir <names...>) 提取目录，如$(dir <src/a.c>) 返回/src

# $(notdir <names...>) 提取文件名，如$(dir <src/a.c>) 返回a.c

# $(foreach <var>, <list>, <text>) 把参数<list>中的单词逐一取出，然后再执行<text>所包含的表达式，每次<text>都会返回一个字符串，循环的过程中，<text> 中所包含的每一个字符都会以空格隔开，当整个循环结束，<text>所返回的每一个字符串所组成的整个字符串将会是函数foreach函数返回值

INCLUDE			:= $(patsubst %, -I %, $(INCDIRS))

SFILES			:= $(foreach dir, $(SRCDIRS), $(wildcard $(dir)/*.s))
CFILES			:= $(foreach dir, $(SRCDIRS), $(wildcard $(dir)/*.c))

SFILENDIRS		:= $(notdir $(SFILES))
CFILENDIRS		:= $(notdir $(CFILES))

SOBJS			:= $(patsubst %, obj/%, $(SFILENDIRS:.s=.o))
COBJS			:= $(patsubst %, obj/%, $(CFILENDIRS:.c=.o))

OBJS			:= $(SOBJS)$(COBJS)

VPATH			:= $(SRCDIRS)

.PHONY : clean

$(TARGET): $(OBJS)
	$(CC) $^ -o $@

$(SOBJS) : obj/%.o : %.s
	$(shell mkdir -p ./obj)
	$(CC) -c -o $@ $<

$(COBJS) : obj/%.o : %.c
	$(shell mkdir -p ./obj)
	$(CC) -c -o $@ $<

clean:
	del -rf $(TARGET).exe
	del -rf obj\*.o